A roll can be a name, and a modifier can be longer than the join reached - #34
Merged
Conversation
CHANGED: An Advanced Mod Descriptions range whose roll is a name is dropped before the wording is looked up, so "Maximum number of Sentinels of Purity (Animated Weapons-Holy Armaments) is Doubled" resolves to the stat trade indexes instead of matching nothing. - The roll is the name in the wording and the parenthesis is the first and last of the list, exactly as "(50-100)" is the first and last of an interval. There is no numeric token in front of it for `scan_numbers` to hang the bounds on, which is why nothing consumed it. - Stripping only ever *adds* candidates, and adds them after the printed form, so "Unique Monsters (Blood-Filled Vessel): #" — which qualifies on shape alone — still resolves as itself. Measured against the 373 shipped vectors: two changed, both that wording and its twin, both gaining trailing candidates only. CHANGED: One modifier may span eight clipboard lines instead of four, so a modifier that enumerates its alternatives is the one filter it is rather than seven unrecognised ones. - Eight is the longest wording in the data. Reaching further is safe because a shorter join always wins: the loop returns at the first join that resolves, so the cap only bounds a failed match. CHANGED: The fixture bundle is sliced from data-20260810.41, which gives a modifier that rolls a name the trade id and the pool it was missing — so the row is ticked as pooled rather than carrying "not in the modifier data for this unique". ADDED: Captures for The Dark Monarch, Replica Dragonfang's Flight and Bound Fate, one per shape: a named range with a space before it, one without and carrying a number of its own, and a seven-line modifier. CHANGED: UNIQUE-MODS.md states that a pool of one modifier is not a mistake, and its limitation counts are re-measured against that release. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release notes
CHANGED: A unique whose modifier rolls one of a list — the minion type The Dark Monarch doubles, the skill gem Replica Dragonfang's Flight raises — is recognised and searched on the one it actually rolled, instead of being reported as an unrecognised modifier.
CHANGED: A modifier that spells out its alternatives, like Bound Fate's "Every 5 seconds, gain one of the following", is read as the single modifier it is rather than as seven unrecognised lines.
CHANGED: A modifier that rolls one of a list is now ticked as one of a pool, so the search asks for the copy that rolled it, and no longer says the unique's modifier data has never heard of it.
Review notes
CHANGED: An Advanced Mod Descriptions range whose roll is a name is dropped before the wording is looked up, so
Maximum number of Sentinels of Purity (Animated Weapons-Holy Armaments) is Doubledresolves to the stat trade indexes instead of matching nothing.(50-100)is the first and last of an interval — rows 0 and 286 of a 287-row client table, against a mod whose range is 1..287. There is no numeric token in front of it forscan_numbersto hang the bounds on, which is why nothing consumed it, and why both lines of a two-line modifier missed and took the join down with them.Unique Monsters (Blood-Filled Vessel): #— which qualifies on shape alone — still resolves as itself. Measured against the 373 shipped vectors: two changed, both that wording and its non-unique twin, both gaining trailing candidates only.NORMALIZATION.mdgains this as step 4 and the data repo'snormalize.pymirrors it byte for byte;normalize_testreplays 375 vectors.CHANGED:
kMaxModLinesis 8 rather than 4, so a modifier that enumerates its alternatives is the one filter it is rather than seven unrecognised ones.CHANGED: The fixture bundle is sliced from
data-20260810.41, which carries the other half of this fix (Data#2): +1,960 trade ids, none lost, and a modifier that rolls a name now arrives as the pool it is.reffrom the game's own wording — and where the game hardcodes a number trade placeholds, the ref carries it (Rewards Baran drops by 20% of its value). That is already how every single-line stat behaves, and the normalizer's literal candidate is what matches it.ADDED: Captures for The Dark Monarch, Replica Dragonfang's Flight and Bound Fate, one per shape — a named range with a space in front of it, one without and carrying a number of its own, and a seven-line modifier.
CHANGED:
UNIQUE-MODS.mdstates that a pool of one modifier is not a mistake, and its limitation counts are re-measured against that release;docs/data-layer.mdcovers both rules.Verified against the published release rather than a local build: all three wordings are claimed by exactly one record in the full 12,293-record bundle, so the 79-stat fixture is not hiding an ambiguity. 21/21 suites pass.